
package br.uff.probabilidade.modelo;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;

/**
 * 
 * 
 * @poseidon-object-id [I875040m120ee925157mm7b96]
 */
public class Marcador {
	
	public static final int DEFAULT_WIDTH = 13;
	public static final int DEFAULT_HEIGHT = 13;
	
	public Marcador(Point posicao,int width,int height,Evento evento,Imagem check){
		this.evento = evento;
		this.width = width;
		this.height = height;
		this.posicao = posicao;
		this.check = check;
	}
	
	public Marcador(int width,int height,Evento evento,Imagem check){
		this.evento = evento;
		this.width = width;
		this.height = height;		
		this.check = check;
	}
	
	private boolean showing = true;
	private Imagem check;
	private boolean mostrandoErro = false;
	private boolean aceito = true;
/**
 * <p>Posicao no Applet</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7b7d]
 */
    private Point posicao;

/**
 * <p>Represents ...</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7b69]
 */
    private boolean marcado = false;    

/**
 * <p>Represents ...</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7a75]
 */
    private int width;

/**
 * <p>Represents ...</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7a64]
 */
    private int height;
    
    private boolean blocked = false;
/**
 * 
 * 
 * @poseidon-object-id [I875040m120ee925157mm7898]
 */
    private br.uff.probabilidade.modelo.Evento evento;

/**
 * <p>Does ...</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7b58]
 * @param g 
 */
    public void desenha(Graphics g) {     
    	if(!this.evento.isHabilitado())return;
    	Color oldColor = g.getColor();
    	Font oldFont  = g.getFont();
    	
    	g.setFont(new Font(g.getFont().getName(),g.getFont().getStyle(),9));
    	g.drawString(String.valueOf(this.evento.getConjunto().getNome()), this.posicao.x+g.getFont().getSize()/2, this.posicao.y-g.getFont().getSize()/2);
    	g.setFont(oldFont);
    	
    	
    	g.setColor(evento.getLegenda().getCor());
    	g.fillRect(posicao.x, posicao.y, this.width, this.height);
    	
    	if(this.isMostrandoErro())g.setColor(Color.RED);
    	else g.setColor(oldColor);
    		
        g.drawRect(posicao.x, posicao.y, this.width, this.height);
        g.setColor(oldColor);
        if(marcado){
        	System.out.println("Draw Check");
        	g.drawImage(this.check.getImagem(),posicao.x+this.check.getWidth()/2-3, posicao.y+this.check.getHeight()/2-1,this.check.getObserver());
        }
    } 

/**
 * <p>Does ...</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7b18]
 */
    public void alteraMarcacao() {       
    	if(!this.isBlocked())
    		this.marcado= ! this.marcado;
    } 

/**
 * <p>Does ...</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7ab5]
 * @param click 
 * @return 
 */
    public boolean checkClick(Point click) {        
        // your code here
    	if (this.getEvento().isHabilitado() &&  click.x>this.posicao.x && click.x<this.posicao.x+this.width && click.y>this.posicao.y && click.y<this.posicao.y+this.height){
    		System.out.println("Clicou Marcador");
    		return true;
    	}
    	return false;
    } 

/**
 * <p>Does ...</p>
 * 
 * @poseidon-object-id [I875040m120ee925157mm7872]
 * @return 
 */
    public br.uff.probabilidade.modelo.Evento getEvento() {        
        // your code here
        return this.evento;
    }

	public boolean isShowing() {
		return showing;
	}
	
	public void setShowing(boolean showing) {
		this.showing = showing;
	}
	
	public boolean isMarcado() {
		return marcado;
	}
	
	public void setMarcado(boolean marcado) {
		if(!this.isBlocked())
			this.marcado = marcado;
	}
	
	public void setPosicao(Point posicao) {
		this.posicao = posicao;
	}

	public boolean isBlocked() {
		return blocked;
	}

	public void setBlocked(boolean blocked) {
		this.blocked = blocked;
	}

	public boolean isMostrandoErro() {
		return mostrandoErro;
	}

	public void setMostrandoErro(boolean mostrandoErro) {
		this.mostrandoErro = mostrandoErro;
	}

	public boolean isAceito() {
		return aceito;
	}

	public void setAceito(boolean aceito) {
		this.aceito = aceito;
	} 
}
